"use client";
import { Label } from "@/components/ui/label";
import { Button } from "@/components/ui/button";
import { Input } from "@/components/ui/input";
import {
  Sheet,
  SheetContent,
  SheetDescription,
  SheetHeader,
  SheetTitle,
  SheetTrigger,
  SheetFooter,
  SheetClose,
} from "@/components/ui/sheet";
import { trpc } from "@/app/_trpc/client";
import { useEffect, useState } from "react";
import {
  Form,
  FormControl,
  FormField,
  FormItem,
  FormLabel,
  FormMessage,
} from "@/components/ui/form";

import { z } from "zod";
import {
  Select,
  SelectContent,
  SelectItem,
  SelectTrigger,
  SelectValue,
} from "@/components/ui/select";
import { useToast } from "@/components/ui/use-toast";
import { AREAS } from "@/helpers/validators";
import useFormHandler from "@/hooks/useFormHandler";
import Loading from "@/components/Loading";
import {
  areaStatusEnum,
  Project,
  ProjectDetail,
} from "@/server/project/domain/models";
import { projectAreaSchema } from "@/lib/schemas/projectAreaSchema";
import { MdModeEdit } from "react-icons/md";
import useAreaForm from "../hooks/useAreaForm";

interface EditValues {
  id: string;
  width?: number;
  length?: number;
  floorId: string;
  type?: string;
  projectId: string;
  projectName: string;
  quantity?: number;
}

interface AreaFormProps {
  project: ProjectDetail;
  isEdit?: boolean;
  editValues?: EditValues;
}

const AreaFormSidebar = ({ project, isEdit, editValues }: AreaFormProps) => {
   const {   open,
    setOpen,
    form,
    isInputChanged,
    isPendingCreateArea,
    isPendingUpdateArea,
    onSubmit,
    isCustomArea,
    resetCustomArea}=useAreaForm({project,isEdit,editValues})

  return (
    <Sheet open={open} onOpenChange={setOpen}>
      <SheetTrigger asChild>
        {isEdit ? (
          <MdModeEdit className="text-2xl text-primary " />
        ) : (
          <Button
            variant="outline"
            size="sm"
            className=" rounded-full text-white bg-primary"
          >
            Crear area
          </Button>
        )}
      </SheetTrigger>
      <SheetContent>
        <SheetHeader>
          <SheetTitle>{isEdit ? "Editar area" : "Crear area"}</SheetTitle>
          <SheetDescription>
            Define la cantidad de material usados.
          </SheetDescription>
        </SheetHeader>
        <Form {...form}>
          <form onSubmit={form.handleSubmit(onSubmit)}>
            <div className="grid gap-4 py-4 mt-10">
              <FormField
                control={form.control}
                defaultValue={project?.name!}
                name="projectName"
                render={({ field }) => (
                  <FormItem>
                    <FormLabel>Projecto</FormLabel>
                    <FormControl>
                      <Input disabled placeholder="Ej: projecto" {...field} />
                    </FormControl>
                    <FormMessage />
                  </FormItem>
                )}
              />
              <FormField
                control={form.control}
                name="floorId"
                render={({ field }) => (
                  <FormItem>
                    <FormLabel>Piso</FormLabel>
                    <Select
                      onValueChange={(val) => field.onChange(val)}
                      defaultValue={field?.value}
                    >
                      <FormControl>
                        <SelectTrigger>
                          <SelectValue placeholder="Seleccione el numero de piso" />
                        </SelectTrigger>
                      </FormControl>
                      <SelectContent>
                        {project?.floor?.map((floor) => (
                          <SelectItem key={floor?.id} value={`${floor?.id}`}>
                            {floor?.name}
                          </SelectItem>
                        ))}
                      </SelectContent>
                    </Select>
                    <FormMessage />
                  </FormItem>
                )}
              />

              <FormField
                control={form.control}
                name="length"
                render={({ field }) => (
                  <FormItem>
                    <FormLabel>Longitud</FormLabel>
                    <FormControl>
                      <Input
                        min={0}
                        type="number"
                        step="0.1"
                        placeholder="Ej: 8.5"
                        {...field}
                      />
                    </FormControl>

                    <FormMessage />
                  </FormItem>
                )}
              />

              <FormField
                control={form.control}
                name="width"
                render={({ field }) => (
                  <FormItem>
                    <FormLabel>Ancho</FormLabel>
                    <FormControl>
                      <Input
                        min={0}
                        type="number"
                        step="0.1"
                        placeholder="Ej: 2.5"
                        {...field}
                      />
                    </FormControl>

                    <FormMessage />
                  </FormItem>
                )}
              />

              {isCustomArea ? (
                <FormField
                  control={form.control}
                  name="type"
                  render={({ field }) => (
                    <FormItem>
                      <FormLabel>Area</FormLabel>
                      <div className="flex gap-1">
                        <FormControl>
                          <Input placeholder="ej: metro" {...field} />
                        </FormControl>
                        <Button
                          className="text-xs bg-yellow-500"
                          type="button"
                          onClick={resetCustomArea}
                        >
                          Resetear
                        </Button>
                      </div>
                      <FormMessage />
                    </FormItem>
                  )}
                />
              ) : (
                <FormField
                  control={form.control}
                  name="type"
                  render={({ field }) => (
                    <FormItem>
                      <FormLabel>Area</FormLabel>
                      <Select
                        onValueChange={field.onChange}
                        defaultValue={field.value}
                      >
                        <FormControl>
                          <SelectTrigger>
                            <SelectValue placeholder="Seleccione el tipo de area" />
                          </SelectTrigger>
                        </FormControl>
                        <SelectContent>
                          {AREAS.map((area) => (
                            <SelectItem key={area?.label} value={area.label}>
                              {area.label}
                            </SelectItem>
                          ))}
                        </SelectContent>
                      </Select>
                      <FormMessage />
                    </FormItem>
                  )}
                />
              )}

              {isEdit && (
                <FormField
                  control={form.control}
                  name="status"
                  render={({ field }) => (
                    <FormItem>
                      <FormLabel>Estado</FormLabel>
                      <FormControl>
                        <Select
                          onValueChange={field.onChange}
                          defaultValue={field.value as any}
                        >
                          <SelectTrigger>
                            <SelectValue placeholder="Select a priority" />
                          </SelectTrigger>
                          <SelectContent>
                            {areaStatusEnum.map((option) => (
                              <SelectItem key={option} value={option}>
                                {option}
                              </SelectItem>
                            ))}
                          </SelectContent>
                        </Select>
                      </FormControl>

                      <FormMessage />
                    </FormItem>
                  )}
                />
              )}
            </div>

            <SheetFooter>
              <Button
                disabled={
                  !isInputChanged || isPendingCreateArea || isPendingUpdateArea
                }
                className="space-x-2"
                type="submit"
              >
                <span className="mr-2">
                  {isPendingCreateArea || isPendingUpdateArea
                    ? "Cargando"
                    : isEdit
                    ? "Editar"
                    : "Crear"}
                </span>
                {isPendingCreateArea || isPendingUpdateArea ? (
                  <Loading size={15} />
                ) : null}
              </Button>
            </SheetFooter>
          </form>
        </Form>
      </SheetContent>
    </Sheet>
  );
};

export default AreaFormSidebar;
